const express = require('express');
const cors = require('cors');
const path = require('path');
const syncDatabase = require('./src/models/sync.js');
// 引入 cookie-parser
const cookieParser = require('cookie-parser');

async function start() {
  try {
    // 同步数据库
    await syncDatabase();

    // 同步成功后启动服务器
    const app = express();

    // 使用 JSON 解析中间件
    app.use(express.json());
    // 使用 URL 编码解析中间件
    app.use(express.urlencoded({ extended: true }));

    // resolve() 方法用于将路径解析为绝对路径, __dirname 表示当前所在目录的绝对路径, 不含文件后缀名
    const staticPath = path.resolve(__dirname, 'public');
    // 设置当前服务器中静态资源的目录
    app.use(express.static(staticPath));
    // 使用跨域中间件解决跨域问题
    app.use(
      cors({
        origin: 'http://localhost:5173', // 前端地址
        credentials: true, // 允许携带凭据
      })
    );

    //解析 cookie 中间件
    app.use(cookieParser());
    //token验证中间件
    app.use(require('./src/middleware/tokenMiddeware.js'));

    // 处理所有路由的中间件
    app.use('/api/users', require('./src/routes/UserController.js'));

    // 错误处理中间件 通常写在最后面
    app.use(require('./src/middleware/errorHandler.js'));

    // 监听端口
    app.listen(3000, () => {
      console.log('服务器3000端口启动成功!');
    });
  } catch (err) {
    console.error('启动服务器失败！', err);
  }
}

start();
